package com.itheima.string;

/**
 * 字符串常量池也是在堆内存当中
 */
public class StringDemo3 {
    public static void main(String[] args) {
        // 目标：搞清楚String使用时的几个注意事项。
        // 1、String对象的内容不可改变，被称为不可变字符串对象
        /**
         * 因为只要是双引号方式写的字符串对象，就会放到常量池中
         * 每次试图改变字符串对象:name = name + "程序员"的时候，实际上是新产生了新的字符串对象了，
         * 变量name每次都是会指向新创建的字符串对象，之前字符串对象的内容确实是没有改变的，因此说String的对象是不可变的。
         */
        String name = "黑马";
        name += "程序员"; // name = name + "程序员"
        name += "播妞";
        System.out.println(name);

        // 2、只要是以“...”方式写出的字符串对象，会存储到字符串常量池，且相同内容的字符串只存储一份
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2); //true

        // 3、但通过new方式创建字符串对象，每new一次都会产生一个新的对象放在堆内存中。
        char[] chars = {'a', 'b', 'c'};
        String a1 = new String(chars);
        String a2 = new String(chars);
        System.out.println(a1 == a2);  //false
    }
}
